<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN" xml:lang="zh_CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="../rurple.css" type="text/css" />

<title>假如，否则，假如，否则...</title>
</head>
<body>
<h2 class="title">14. 假如，否则，假如，否则...</h2>

<p>之前的跨栏练习<small>(你已经做过了，是吧?)</small>要求我们写 <span class="pykeyword">if</span>/<span class=
"pykeyword">else</span>以及另一个命令 , 这都是因为我们想给乐跑机器人三个选择：结束、移动或者跳跃。 你或许已经意识到这迫使我们的代码越来越缩进去了。 想象一下，如果我们要给机器人10个相互独立的选择，结果代码要变得多么的难读。<br /><br />
 为了在这种情况下有所帮助, Guido van Rossum先生,Python的创造者,建立了一个新的Python关键词，它代表了一个<span class="pykeyword">else</span>状态紧跟一个 <span class="pykeyword">if</span> 子句的结合. 这个关键词就是 <span class=
"pykeyword">elif</span>,我们可以将它看成是<span class="pykeyword">else if</span>的缩写. 用了这个新的关键词，之前的课程的代码可以写为：</p>

<pre>
<span class="keyword">def</span> move_jump_or_finish():
    <span class="keyword">if</span> on_beeper():
        turn_off()
    <span class="keyword">elif</span> front_is_clear():
        move()
    <span class="keyword">else</span>:
        jump_one_hurdle()
</pre>

<p>现在我们可以更清楚的看到，由于它们可以在同一列排列，看起来就有三个可能的选择。 只有当前面所有的条件都是假时，<span class="pykeyword">else</span>才会执行，所以它不跟任何条件。 当我们有多于三个选择时，我们所要做的就是加上其它 <span class="pykeyword">elif</span>状态。</p>

<pre>
<span class="keyword">def</span> move_jump_or_finish():
    <span class="keyword">if</span> on_beeper():
        turn_off()
    <span class="keyword">elif</span> front_is_clear():
        move()
    <span class="keyword">elif</span> right_is_clear(): <span class=
"comment"># 总是假</span>
        <span class="keyword">pass</span> 
    <span class="keyword">else</span>:
        jump_one_hurdle()
</pre>

<p>当机器人沿着墙走时，<tt>right_is_clear()</tt>总是为假(因为右面总是有墙壁），于是<span class="pykeyword">pass</span> 命令 (Python就相当于“什么也不做”)就总是被忽略了。 注意，如果我们已经用了 <tt>left_is_clear()</tt>, 一旦机器人遇到了第一个栏杆，它将永远被黏在原地。 <b>自己尝试一下吧！</b></p>

<h3 class="try">轮到你了</h3>

<p>尝试用<span class="pykeyword">if, elif, else</span>写一个程序，使得它能够如同前两个跨栏课程中的那样运行成功(见文件hurdles3.wld):</p>

<img alt="hurdles start" src="../../images/intro/hurdles3_start.png" />

<div class="lessons_nav">
<a href="13-else.htm"><img alt="previous" src=
"../../images/previous.png" /> 听我的...否则...</a> - <a href=
"../lessons_toc.htm"><img alt="home" src="../../images/home.png" /></a> - <a href=
"15-not.htm">不是真的!? <img alt="next" src=
"../../images/next.png" /></a>
</div>
</body>
</html>
